﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;

using Business = SoTaiChinh.Library.Business;
using Entity = SoTaiChinh.Library.Entity;
public partial class controls_admin_listuser : System.Web.UI.UserControl
{
    //Khởi tạo giá trị ban đầu cho cột STT trong bảng danh sách thành viên
    public int stt = 1;

    //Khai báo biến kiểu DataTable chứa dữ liệu lấy từ bảng ThanhVien từ CSDL
    private static DataTable dtThanhVien = new DataTable();
    //Khởi tạo đối tượng thanhvien
    Business.ThanhVien thanhvien = new Business.ThanhVien();

    //Khai báo biến kiểu DataTable chứa dữ liệu lấy từ bảng QuyenTruyCap từ CSDL
    DataTable dtQuyenTruyCap = new DataTable();
    //Khởi tạo đối tượng quyentruycap    
    Business.QuyenTruyCap quyentruycap = new Business.QuyenTruyCap();

    Entity.ThanhVien entity = new Entity.ThanhVien();

    #region Phân trang bằng PagedDataSource
    
    //Khái báo các property trang, chỉ số đầu, chỉ số cuối
    private int CurrentPage
    {
        get
        {
            object objPage = ViewState["_CurrentPage"];

            int _CurrentPage = 0;
            if (objPage == null)
            {
                _CurrentPage = 0;
            }
            else
            {
                _CurrentPage = (int)objPage;
            }
            return _CurrentPage;
        }
        set { ViewState["_CurrentPage"] = value; }
    }
    private int fistIndex
    {
        get
        {

            int _FirstIndex = 0;
            if (ViewState["_FirstIndex"] == null)
            {
                _FirstIndex = 0;
            }
            else
            {
                _FirstIndex = Convert.ToInt32(ViewState["_FirstIndex"]);
            }
            return _FirstIndex;
        }
        set { ViewState["_FirstIndex"] = value; }
    }
    private int lastIndex
    {
        get
        {
            int _LastIndex = 0;
            if (ViewState["_LastIndex"] == null)
            {
                _LastIndex = 0;
            }
            else
            {
                _LastIndex = Convert.ToInt32(ViewState["_LastIndex"]);
            }
            return _LastIndex;
        }
        set { ViewState["_LastIndex"] = value; }
    }
    
    PagedDataSource _PageDataSource = new PagedDataSource();
    
    //Load dữ liệu và phân trang cho dữ liệu
    private void BindItemsList(DataTable dt)
    {
        DataTable dataTable = dt;
        _PageDataSource.DataSource = dataTable.DefaultView;
        _PageDataSource.AllowPaging = true;
        _PageDataSource.PageSize = 3;
        _PageDataSource.CurrentPageIndex = CurrentPage;
        ViewState["TotalPages"] = _PageDataSource.PageCount;

        this.lblPageInfo.Text = "Trang " + (CurrentPage + 1) + " của " + _PageDataSource.PageCount;
        this.lbtnPrevious.Enabled = !_PageDataSource.IsFirstPage;
        this.lbtnNext.Enabled = !_PageDataSource.IsLastPage;
        this.lbtnFirst.Enabled = !_PageDataSource.IsFirstPage;
        this.lbtnLast.Enabled = !_PageDataSource.IsLastPage;

        this.rptDanhSachThanhVien.DataSource = _PageDataSource;
        this.rptDanhSachThanhVien.DataBind();
        this.doPaging();
    }
    //Phân trang
    private void doPaging()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("PageIndex");
        dt.Columns.Add("PageText");
        fistIndex = CurrentPage - 5;
        if (CurrentPage > 5)
        {
            lastIndex = CurrentPage + 5;
        }
        else
        {
            lastIndex = 10;
        }
        if (lastIndex > Convert.ToInt32(ViewState["TotalPages"]))
        {
            lastIndex = Convert.ToInt32(ViewState["TotalPages"]);
            fistIndex = lastIndex - 10;
        }
        if (fistIndex < 0)
        {
            fistIndex = 0;
        }
        for (int i = fistIndex; i < lastIndex; i++)
        {
            DataRow dr = dt.NewRow();
            dr[0] = i;
            dr[1] = i + 1;
            dt.Rows.Add(dr);
        }
        this.dlPaging.DataSource = dt;
        this.dlPaging.DataBind();
    }
    
    //Trang dầu tiên
    protected void lbtnFirst_Click(object sender, EventArgs e)
    {
        CurrentPage = 0;
        BindItemsList(dtThanhVien);
    }
    //Trang sau trang đang hiển thị
    protected void lbtnPrevious_Click(object sender, EventArgs e)
    {
        CurrentPage -= 1;
        BindItemsList(dtThanhVien);
    }
    //Trang tiếp theo trang đang hiển thị
    protected void lbtnNext_Click(object sender, EventArgs e)
    {
        CurrentPage += 1;
        BindItemsList(dtThanhVien);
    }
    //Trang cuối
    protected void lbtnLast_Click(object sender, EventArgs e)
    {
        CurrentPage = (Convert.ToInt32(ViewState["TotalPages"]) - 1);
        BindItemsList(dtThanhVien);
    }
    //Hàm sự kiện dlPaging
    protected void dlPaging_ItemCommand(object source, DataListCommandEventArgs e)
    {
        if (e.CommandName.Equals("Paging"))
        {
            CurrentPage = Convert.ToInt32(e.CommandArgument.ToString());
            BindItemsList(dtThanhVien);
        }
    }
    protected void dlPaging_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        LinkButton lnkbtnPage = (LinkButton)e.Item.FindControl("lnkbtnPaging");
        if (lnkbtnPage.CommandArgument.ToString() == CurrentPage.ToString())
        {
            lnkbtnPage.Enabled = false;
            //lnkbtnPage.Style.Add("fone-size", "14px");
            //lnkbtnPage.Font.Bold = true;
            lnkbtnPage.CssClass = "active";
        }
    }
    #endregion

    //Hàm Pageload
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            LoadQuyenTruyCap();
            dtThanhVien = thanhvien.Select();
            LoadThanhVien(dtThanhVien);
        }
        //LoadThanhVien(dtThanhVien);
    }

    //Load tất cả thành viên có trong bảng ThanhVien từ CSDL
    //Giá trị truyền vào kiểu DataTable
    protected void LoadThanhVien(DataTable dtThanhVien)
    {                
        if (dtThanhVien.Rows.Count == 0)
        {
            BindItemsList(dtThanhVien);
            PhanTrang.Visible = false; 
            msgNoRows.Style.Add("display", "block");
        }
        else if (dtThanhVien.Rows.Count > 0 && dtThanhVien.Rows.Count <= 3)
        {
            BindItemsList(dtThanhVien);
            PhanTrang.Visible = false;
        }
        else if (dtThanhVien.Rows.Count > 3)
        {
            BindItemsList(dtThanhVien);
            PhanTrang.Visible = true;
        }
    }

    //Load tất cả quyền truy cập có trong bảng QuyenTruyCap từ CSDL
    protected void LoadQuyenTruyCap()
    {
        dtQuyenTruyCap = quyentruycap.Select();
        if (dtQuyenTruyCap.Rows.Count > 0)
        {
            ddlQuyenTruyCap.DataSource = dtQuyenTruyCap;
            ddlQuyenTruyCap.DataTextField = "TenQuyen";
            ddlQuyenTruyCap.DataValueField = "Id";
        }
        else
        {
            ddlQuyenTruyCap.DataSource = null;
        }
        ddlQuyenTruyCap.DataBind();
        ddlQuyenTruyCap.Items.Insert(0, "Tất cả");
    }

    //Hàm sự kiện ItemCommand của repeater
    protected void rptDanhSachThanhVien_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        try
        {
            //Nếu click nút xóa từ danh sách
            if (e.CommandName == "xoa")
            {
                bool xoa = false;
                entity.TenDangNhap = e.CommandArgument.ToString();
                xoa = thanhvien.Delete(entity);
                if (xoa == true)
                {
                    Alert.Show("Xóa thành viên thành công");
                    dtThanhVien = thanhvien.Select();
                    LoadThanhVien(dtThanhVien);
                }
                else
                {
                    Alert.Show("Xóa thành viên không thành công!");
                    LoadThanhVien(dtThanhVien);
                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    //Hàm xóa một hoặc nhiều thành viên một lúc bằng cách chọn checkbox
    protected void btnXoa_Click(object sender, EventArgs e)
    {
        try
        {
            //Duyệt tất cả các item trong Repeater
            foreach (RepeaterItem liItem in rptDanhSachThanhVien.Items)
            {                
                CheckBox cbTenDangNhap = liItem.FindControl("CheckSelect") as CheckBox;                
                //Nếu trạng thái của checkbox = Checked
                if (cbTenDangNhap.Checked)
                {
                    string litendangnhap = (liItem.FindControl("ltTenDangNhap") as Literal).Text;
                    entity.TenDangNhap = litendangnhap;
                    bool xoa = false;
                    xoa = thanhvien.Delete(entity);
                    if (xoa == true)
                    {
                        Alert.Show("Xóa thành viên thành công!");                        
                    }
                    else
                    {
                        Alert.Show("Xóa thành viên không thành công!");
                    }
                }
            }
            //Load lại danh sách thành viên sau khi xóa            
            dtThanhVien = thanhvien.Select();
            LoadThanhVien(dtThanhVien);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    
    //Hàm làm mới danh sách thành viên
    protected void btnLamMoi_Click(object sender, EventArgs e)
    {
        try
        {
            CurrentPage = 0;
            dtThanhVien = thanhvien.Select();
            LoadThanhVien(dtThanhVien);
            msgSuccess.Style.Add("display", "none");
            msgNoRows.Style.Add("display", "none");
            msgSearch.Style.Add("display", "none");
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    //Hàm xử lý tìm kiếm thành viên
    protected void btnTim_Click(object sender, EventArgs e)
    {
        try
        {
            CurrentPage = 0;
            //Tìm kiếm theo tên trên tất cả các loại quyền truy cập
            if (ddlQuyenTruyCap.SelectedValue.ToString() == "Tất cả")
            {
                dtThanhVien = thanhvien.SearchAll(txtTuKhoa.Text);
                if (dtThanhVien.Rows.Count > 0)
                {
                    LoadThanhVien(dtThanhVien);
                    msgSuccess.InnerText = "Có tất cả " + dtThanhVien.Rows.Count + " kết quả như bạn tìm kiếm!";
                    msgSuccess.Style.Add("display", "block");
                    msgSearch.Style.Add("display", "none");
                    msgNoRows.Style.Add("display", "none");
                }
                else
                {                    
                    rptDanhSachThanhVien.DataSource = null;
                    msgSuccess.Style.Add("display", "none");
                    msgSearch.Style.Add("display", "block");
                    msgNoRows.Style.Add("display", "none");
                    rptDanhSachThanhVien.DataBind();
                }                
            }
            else
            {
                //Tìm theo tên trên từng loại quyền truy cập
                int quyen = Convert.ToInt32(ddlQuyenTruyCap.SelectedItem.Value.ToString());
                dtThanhVien = thanhvien.SearchByQuyen(txtTuKhoa.Text, quyen);
                if (dtThanhVien.Rows.Count > 0)
                {
                    LoadThanhVien(dtThanhVien);
                    msgSuccess.InnerText = "Có tất cả " + dtThanhVien.Rows.Count + " kết quả như bạn tìm kiếm!";
                    msgSuccess.Style.Add("display", "block");
                    msgSearch.Style.Add("display", "none");
                }
                else
                {                    
                    rptDanhSachThanhVien.DataSource = null;
                    msgSuccess.Style.Add("display", "none");
                    msgSearch.Style.Add("display", "block");
                    msgNoRows.Style.Add("display", "none");
                    rptDanhSachThanhVien.DataBind();
                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    protected void btnThem_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/admin/adduser.aspx?action=add");
    }
}
